package resources;

import java.awt.PageAttributes.MediaType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.xml.bind.JAXBElement;

import model.Livro;

import com.sun.research.ws.wadl.Response;

@Path("/livros")
public class LivroResource {

	private Map<String, Livro> livrosMap2 = new HashMap<String, Livro>();

//	@GET
//	@Produces("text/xml")
//	public List<Livro> getBandas() {
//		return new ArrayList<Livro>(livrosMap2.values());
//	}

	@GET
//	@Produces({ "text/xml" })
	@Produces({ "text/xml", "application/json" })
	public List<Livro> getLivros() {
		Livro livro = new Livro();
		ArrayList<Livro> listaLivros = livro.getLivros();
		Livro l1;
		for (int i = 0; i < listaLivros.size(); i++) {
			l1 = new Livro();
			l1.setIdLivro(listaLivros.get(i).getIdLivro());
			l1.setIsbn(listaLivros.get(i).getIsbn());
			l1.setTitulo(listaLivros.get(i).getTitulo());
			l1.setObs(listaLivros.get(i).getObs());
			livrosMap2.put(l1.getIsbn(), l1);
			System.out.println("b1.getIsbn(): " + l1.getIsbn());
			i++;
		}
		return new ArrayList<Livro>(livrosMap2.values());
	}

	/*
	 * ****************************************************
//	 */
//	@Path("{isbn}")
//	@GET
//	@Produces("text/xml")
//	public Livro getLivro(@PathParam("isbn") String isbn) {
//		return livrosMap2.get(isbn);
//	}

	@Path("{isbn}")
	@GET
//	@Produces("text/xml")
	@Produces({ "text/xml", "application/json" })
	public List<Livro> getLivro(@PathParam("isbn") String isbn) {
		Livro livro = new Livro();
		ArrayList<Livro> listaLivros = livro.getLivroByIsbn(isbn);
		Livro b1;
		for (int i = 0; i < listaLivros.size(); i++) {
			b1 = new Livro();
			b1.setIdLivro(listaLivros.get(i).getIdLivro());
			b1.setIsbn(listaLivros.get(i).getIsbn());
			b1.setTitulo(listaLivros.get(i).getTitulo());
			b1.setObs(listaLivros.get(i).getObs());
			livrosMap2.put(b1.getIsbn(), b1);
			System.out.println("b1.getIsbn(): " + b1.getIsbn());
			i++;
		}
		return new ArrayList<Livro>(livrosMap2.values());
	}

	/*
	 * ****************************************************
	 */
	@Path("{isbn}")
//	@Path("/livros/delete/{isbn}")
	@DELETE
	@Produces("text/plain")
	public String removeLivro(@PathParam("isbn") String isbn) {
		Livro livro = new Livro();
		if (livro.excluir(isbn)) {
			return "Livro removido com sucesso.";
		}
		return "ERRO ao remover Livro.";
	}

	/*
	 * ****************************************************
	 */
	@POST
	@Consumes("text/xml")
	@Produces("text/plain")   
	public String adicionaLivro(Livro livro) {
//		livro.setIsbn(String.valueOf(livrosMap2.size() + 1));
//		livrosMap2.put(livro.getIsbn(), livro);
//		return livro.getTitulo() + " adicionado.";
		
		Livro liv = new Livro();
		if (liv.inserir(livro)) {
			return "Livro inserido com sucesso.";
		}else{
			return "ERRO ao inserir Livro.";
		}
	}

	/*
	 * ****************************************************
	 */
	@Path("{isbn}")
	@PUT
	@Consumes("text/xml")
	@Produces("text/plain")
	public String atualizaLivro(Livro livro, @PathParam("isbn") String isbn) {
//		Livro atual = livrosMap2.get(isbn);
//		atual.setTitulo(livro.getTitulo());
//		atual.setObs(livro.getObs());
		
		Livro liv = new Livro();
		if (liv.atualizar(livro, isbn)) {
			return "Livro atualizado com sucesso.";
		}else{
			return "ERRO ao atualizar Livro.";
		}
	}
}